﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;

namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaTurnoViewModel
    {
        private RelayCommand buscarTurnoCommand;
        private RelayCommand editarTurnoCommand;
        private RelayCommand eliminarTurnoCommand;

        public event EditarEntidad EditarEntidad;
        private string año;
        private Guid idSeleccionado;

        public string Año
        {
            get { return año; }
            set { año = value; }

        }

        public ICommand BuscarTurnoCommand
        {
            get
            {
                return buscarTurnoCommand;
            }
        }

        public ICommand EditarTurnoCommand
        {
            get
            {
                return editarTurnoCommand;
            }
        }

        public ICommand EliminarTurnoCommand
        {
            get
            {
                return eliminarTurnoCommand;
            }
        }


        public List<ViewEntity> ListaTurnos { get; set; }

        public Guid IdSeleccionado
        {
            get { return idSeleccionado; }
            set { idSeleccionado = value; }

        }

        private VentanaBusquedaTurno view;

        public VentanaBusquedaTurnoViewModel() { }

        public VentanaBusquedaTurnoViewModel(VentanaBusquedaTurno vista)
        {
            this.view = vista;
            this.buscarTurnoCommand = new RelayCommand(BuscarTurno);
            this.editarTurnoCommand = new RelayCommand(EditarTurno);

            this.año = DateTime.Now.Year.ToString();

        }

        public VentanaBusquedaTurnoViewModel(VentanaBusquedaTurno vista, string eliminar)
        {
            this.view = vista;
            this.buscarTurnoCommand = new RelayCommand(BuscarTurno);
            this.eliminarTurnoCommand = new RelayCommand(EliminarTurno);
            this.view.btnEditar.Visibility = Visibility.Collapsed;
            this.view.btnEliminar.Visibility = Visibility.Visible;
            this.view.titulo.Content = "Eliminar Turno";

            this.año = DateTime.Now.Year.ToString();
        }

        public void BuscarTurno(object parameter)
        {
            if (Validaciones())
            {
                ListaTurnos = new TurnoLogica().ObtenerTurnosAEditarPorAño(Convert.ToInt32(this.año));

                if (ListaTurnos != null && ListaTurnos.Count > 0)
                {
                    this.view.listaDatos.ItemsSource = ListaTurnos;
                    this.view.panelResultados.Visibility = Visibility.Visible;
                    this.view.lblCicloLectivoNoRecords.Visibility = Visibility.Collapsed;
                    this.view.lblTurnoNoRecords.Visibility = Visibility.Collapsed;
                    this.view.lblTurnoNoSelected.Visibility = Visibility.Collapsed;
                }
                else
                {
                    this.view.panelResultados.Visibility = Visibility.Collapsed;
                    this.view.lblCicloLectivoNoRecords.Visibility = Visibility.Collapsed;
                    this.view.lblTurnoNoRecords.Visibility = Visibility.Visible;
                    
                }
            }         


        }


        public void EditarTurno(object Parameter)
        {

            if (this.idSeleccionado != Guid.Empty)
            {
                this.view.lblTurnoNoSelected.Visibility = Visibility.Collapsed;

                Turno entidad = new TurnoLogica().ObtenerEntidadParaEditar(idSeleccionado);
                this.EditarEntidad(CasosDeUso.NuevoTurno, entidad);
                this.view.Close();

            }
            else
            {
                this.view.lblTurnoNoSelected.Visibility = Visibility.Visible;
            }

        }

        public void EliminarTurno(object Parameter)
        {

            if (this.idSeleccionado != Guid.Empty)
            {
                if (MessageBox.Show("¿Está seguro que desea eliminar los datos del turno seleccionado?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                {
                    this.view.lblTurnoNoSelected.Visibility = Visibility.Collapsed;

                    Turno entidad = new TurnoLogica().ObtenerEntidadParaEditar(idSeleccionado);

                    if (!new TurnoLogica().TieneInscriptos(entidad.IdTurno))
                    {
                        entidad.Eliminado = true;
                        new TurnoLogica().Modificar(entidad);

                        VentanaAviso nueva = new VentanaAviso(false, "Finalización exitosa", "El turno seleccionado ha sido eliminado");
                        nueva.ShowDialog();
                        this.view.Close();
                    }
                    else
                    {
                        VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No es posible eliminar un turno que tiene alumnos inscriptos");
                        nueva.ShowDialog();

                    }


                }

            }
            else
            {
                this.view.lblTurnoNoSelected.Visibility = Visibility.Visible;
            }

        }

        internal bool Validaciones()
        {

            if (this.año.Length != 4)
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Año' ha sido ingresado de forma incorrecta");
                this.view.panelResultados.Visibility = Visibility.Collapsed;
                this.view.lblCicloLectivoNoRecords.Visibility = Visibility.Collapsed;
                this.view.lblTurnoNoRecords.Visibility = Visibility.Collapsed;
                nueva.ShowDialog();
                return false;

            }

            if (!new CicloLectivoLogica().ValidarAño(Convert.ToInt32(this.año)))
            {
                this.view.lblCicloLectivoNoRecords.Visibility = Visibility.Visible;
                this.view.panelResultados.Visibility = Visibility.Collapsed;
                this.view.lblTurnoNoRecords.Visibility = Visibility.Collapsed;
                return false;
            }

            return true;
        }









    }
}
